﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Data;
using System.Web.UI.WebControls;
using vudu.EnlaceDatos.SqlServer;
using vudu.Logica.Clases;
using vudu.PaginasWeb.G6Pensum;

namespace vudu.PaginasWeb.G6Pensum
{
    public partial class ModificarPensum1 : System.Web.UI.Page
    {
        // Se instancian los objetos que se utilizaran en distintos metodos que requieren ser globales
        Pensum miPensum = new Pensum();
        Materia materia = new Materia();
        SqlServerPensum miServer = new SqlServerPensum();
        List<Prelacion> misMaterias = new List<Prelacion>();
        static Materia laMateria = new Materia();
        int idEscuela;
        int numeroDeCheck = 0;
        
        System.Web.UI.WebControls.CheckBox CheckBoxAgregarMateria = new CheckBox();

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string miRol = (string)Session["rol"];
                if (miRol != "Escuela")
                    Response.Redirect("../G3AccesoSistema/InicioSistema.aspx");
                Escuela miEscuela = (Escuela)Session["Usuario"];
                nombreEscuela.Text = miEscuela.NombreEscuela;
                Session["idMiEscuela"] = "Escuela: "+miEscuela.IdEscuela;
                idEscuela = miEscuela.IdEscuela;
            }
            catch
            {
                //mensaje.Text = "Error: no se puede conectar con la base de datos";
                //mensaje.CssClass = "mensaje";
                ///mensaje.Visible = true;
            }

            if (!IsPostBack)
            {
                int idPensum = (int)Session["idPensum"];
                //Se consultan las materias de un pensum y se devuelven en una lista
                misMaterias = miServer.ConsultarMateriasPensum(idEscuela, idPensum);
                //Cargar las materias en un GridView para poderlas elegir 
                GridView7.DataSource = cargarMateriaTabla3(misMaterias);
                GridView7.DataBind();
            }
        }
        //Este metodo llena un GridView por medio de una tabla para mostrar las materias
        //Recibe una lista de materias del pensum
        public DataTable cargarMateriaTabla3(List<Prelacion> misMaterias)
        {
            // Generar la DataTable de la lista de materias
            DataTable table3 = new DataTable();
            //Se definen las columnas
            table3.Columns.Add("Materia", typeof(string));
            table3.Columns.Add("Codigo", typeof(string));
            //Se recorre la lista de materias que seran insertadas en la tabla
            for (int indiceDeMaterias = 0; indiceDeMaterias < misMaterias.Count; indiceDeMaterias++)
            {
                table3.Rows.Add(misMaterias[indiceDeMaterias].MiMateriaPensum.Nombre, misMaterias[indiceDeMaterias].MiMateriaPensum.Codigo);
            }

            return table3;
        }

        //Solo se puede elegir una materia a modificar, asi que este metodo valida que solo sea marcado un check
        public int ValidarGridView1()
        {
            //Se recorre todo el GridView por fila
            foreach (GridViewRow row in GridView7.Rows)
            {
                //Se declara un CheckBox que buscara el identificador del checkbox por fila
                CheckBox materiaCheckeada = row.FindControl("chkSeleccionar") as CheckBox;
                //Si el checkbox esta chequeado se suma un contador global de checks
                if (materiaCheckeada.Checked)
                {
                    numeroDeCheck++;
                }
            }
            return numeroDeCheck;
        }

        //Este metodo devuelve la materia que fue seleccionada por medio del checkbox
        public Materia RecorrerGridView1()
        {
            //Instancio un objeto de tipo materia
            Materia miMateria = new Materia();
            //Se recorre todo el GridView por fila
            foreach (GridViewRow row in GridView7.Rows)
            {
                //Se declara un CheckBox que buscara el identificador del checkbox por fila
                CheckBox materiaCheckeada = row.FindControl("chkSeleccionar") as CheckBox;
                //Si el checkbox esta chequeado se guardan los datos de la materia en el objeto miMateria
                if (materiaCheckeada.Checked)
                {
                    miMateria.Nombre = row.Cells[1].Text;
                    miMateria.Codigo = Convert.ToInt32(row.Cells[2].Text);

                }
            }
            //Retorna la materia seleccionada
            return miMateria;
        }

        //Metodo que se activa al presionar el boton de Aceptar al seleccionar una materia
        public void Boton2_Onclick(Object sender, EventArgs e)
        {   //Aqui se llama al metodo que valida cuantos checkboxs han sido seleccionados
            //La variable numeroValidar representa la cantidad de checkbox seleccionados
            int numeroValidar = ValidarGridView1();
            //Si fue seleccionado un solo checkbox se recorre el GridView para buscar la opcion seleccionada
            if (numeroValidar == 1)
            {
                materia = RecorrerGridView1();
                laMateria = materia;
                //Se pasa la materia seleccionada mediante un session
                Session["materiaModificada"] = laMateria;
                //Redirecciona a la siguiente pagina
                Response.Redirect("ModificarPensum2.aspx");
            }
            else
            {
                //Muestra el mensaje de cuando se seleccionan mas de un checkbox
                mensaje.Text = "Sólo debe seleccionarse una materia";
            }
        }
    }
}